// 第一步   npm init -y 初始化项目
// 第二步  下载 apifox 以备后面发送请求使用  https://www.apifox.cn/?utm_source=baidu_sem3
// https://www.expressjs.com.cn/4x/api.html
const express = require('express'); // npm i express
const app = express();


// 格式化 body
app.use(express.json()); // 对应处理 json形式的body传参
app.use(express.urlencoded({extended:false}))  // urlencode的body传参


// nunjucks模板引擎 的使用（另外一个最常用js模板引擎 是ejs  https://ejs.bootcss.com/）
// nunjucks的官方 https://mozilla.github.io/nunjucks

const nunjucks = require('nunjucks'); // npm i nunjucks  

const path = require('path');

app.set('view engine','nj') // 设置模板引擎为nunjucks

app.set('views',path.resolve(__dirname,'./views')); // 设置模板放置的路径
nunjucks.configure('views',{autoescape:true,express:app});

// nunjucks模板引擎  配置结束


//  引入用户路由

const userRouter = require('./user.js');


// 洋葱模式 （中间件）

// 全局中间件   req request   res  response
app.use((req,res,next)=>{
    // 通过中间件的模式 我们可以对req对象进行挂载一些自定义属性  
    // 从而让这个属性能贯穿整个应用
    req.abc = 123; 
    // 回应用户  res.send( 字符 或者是 对象)
    // res.send('hi! man')
    console.log(' fired  on line 13 ');
    next();
    console.log('我要走啦！！！！')
})

app.use((req,res,next)=>{
    console.log('我是第二层开始',req.abc);

    console.log('ip',req.ip)
    next()
    console.log('我是第二层结束')

})

// 指定路由的中间件
app.use('/a',(req,res)=>{
    console.log('fired on line 19',req.abc)
    res.send('hi! still here')
})


app.use(['/c','/d','/e'],[
   (req,res,next)=>{
       console.log('c lv1');
       next()
   },
   (req,res,next)=>{
        console.log('c lv2')
        next()
   },
   (req,res)=>{
        console.log('c lv3');
        res.send('我是新的ddddddddd')
   }

])


// 中间件的 结束



// app.请求方式('访问路径',处理函数)
app.get('/b',(req,res)=>{
    res.send('我是在访问/b by get  请求的时候返回的')
})

// 
app.post('/b',(req,res)=>{
    res.send('我是在访问/b by post  请求的时候返回的')
})



app.get('/byget',(req,res)=>{
    
    console.log('query',req.query); // 这是得到 请求的时候通过url携带的 query参数(search参数)
    console.log('headers',req.headers)
    res.send('6月22号是什么节日？')
})


app.post('/bypost', (req,res)=>{
    console.log('query',req.query);
    console.log('body',req.body);
    res.send('我也不知道是什么节日')
})


app.get('/qq',(req,res)=>{
    
    res.send('<h1>我是QQ的伪装页面</h1>')
})

// mvc  结构   v - view 视图(模板)   c - controller   m model 数据模型
//  mvc 还是我们目前最主要的pc站点的 网站形态
app.get('/163',(req,res)=>{

    // res.render(指定一个模板,{ 注入 到模板当中的数据 })
    res.render('kfc',{
        title:'我是标题',
        showLogin: false,
        list:[
            {id:1,title:'我是标题1'},
            {id:2,title:'我是标题2'}
        ]

    })

})

// 路由的使用  当访问的url 是以 /user/? 都会再分配到userRouter进行再处理
app.use('/user',userRouter); // 

// node 文件名 就执行运行 并监听3000端口
app.listen(3000,()=>{
    console.log('app start on port 3000')
})